{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Chebychev design of an FIR filter given a desired $H(\\omega)$\n",
    "\n",
    "A derivative work by Judson Wilson, 5/27/2014.<br>\n",
    "Adapted from the CVX example of the same name, by Almir Mutapcic, 2/2/2006.\n",
    "\n",
    "Topic References:\n",
    "\n",
    "* \"Filter design\" lecture notes (EE364) by S. Boyd\n",
    "\n",
    "## Introduction\n",
    "\n",
    "This program designs an FIR filter, given a desired frequency response $H_\\mbox{des}(\\omega)$.\n",
    "The design is judged by the maximum absolute error (Chebychev norm).\n",
    "This is a convex problem (after sampling it can be formulated as an SOCP),\n",
    "which may be written in the form:\n",
    "    \\begin{array}{ll}\n",
    "    \\mbox{minimize}   &  \\max |H(\\omega) - H_\\mbox{des}(\\omega)| \n",
    "                             \\quad \\mbox{ for }  0 \\le \\omega \\le \\pi,\n",
    "    \\end{array}\n",
    "where the variable $H$ is the frequency response function, corresponding to an impulse response $h$.\n",
    "\n",
    "## Initialize problem data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import cvxpy as cp\n",
    "\n",
    "#********************************************************************\n",
    "# Problem specs.\n",
    "#********************************************************************\n",
    "# Number of FIR coefficients (including the zeroth one).\n",
    "n = 20\n",
    "\n",
    "# Rule-of-thumb frequency discretization (Cheney's Approx. Theory book).\n",
    "m = 15*n\n",
    "w = np.linspace(0,np.pi,m)\n",
    "#********************************************************************\n",
    "# Construct the desired filter.\n",
    "#********************************************************************\n",
    "# Fractional delay.\n",
    "D = 8.25                # Delay value.\n",
    "Hdes = np.exp(-1j*D*w)  # Desired frequency response.\n",
    "\n",
    "# Gaussian filter with linear phase. (Uncomment lines below for this design.)\n",
    "#var = 0.05\n",
    "#Hdes = 1/(np.sqrt(2*np.pi*var)) * np.exp(-np.square(w-np.pi/2)/(2*var))\n",
    "#Hdes = np.multiply(Hdes, np.exp(-1j*n/2*w))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Solve the minimax (Chebychev) design problem"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Problem status: optimal\n",
      "final objective value: 0.4999999999999996\n"
     ]
    }
   ],
   "source": [
    "# A is the matrix used to compute the frequency response\n",
    "# from a vector of filter coefficients:\n",
    "#     A[w,:] = [1 exp(-j*w) exp(-j*2*w) ... exp(-j*n*w)]\n",
    "A = np.exp( -1j * np.kron(w.reshape(-1, 1), np.arange(n)))\n",
    "\n",
    "# Presently CVXPY does not do complex-valued math, so the\n",
    "# problem must be formatted into a real-valued representation.\n",
    "\n",
    "# Split Hdes into a real part, and an imaginary part.\n",
    "Hdes_r = np.real(Hdes)\n",
    "Hdes_i = np.imag(Hdes)\n",
    "\n",
    "# Split A into a real part, and an imaginary part.\n",
    "A_R = np.real(A)\n",
    "A_I = np.imag(A)\n",
    "\n",
    "#\n",
    "# Optimal Chebyshev filter formulation.\n",
    "#\n",
    "\n",
    "# h is the (real) FIR coefficient vector, which we are solving for.\n",
    "h = cp.Variable(shape=n)\n",
    "# The objective is:\n",
    "#     minimize max(|A*h-Hdes|)\n",
    "# but modified into an equivelent form:\n",
    "#     minimize max( real(A*h-Hdes)^2 + imag(A*h-Hdes)^2 )\n",
    "# such that all computation is done in real quantities only.\n",
    "obj = cp.Minimize(\n",
    "    cp.max(  cp.square(A_R * h - Hdes_r)     # Real part.\n",
    "           + cp.square(A_I * h - Hdes_i) ) ) # Imaginary part.\n",
    "\n",
    "# Solve problem.\n",
    "prob = cp.Problem(obj)\n",
    "prob.solve()\n",
    "\n",
    "# Check if problem was successfully solved.\n",
    "print('Problem status: {}'.format(prob.status))\n",
    "if prob.status != cp.OPTIMAL:\n",
    "    raise Exception('CVXPY Error')\n",
    "print(\"final objective value: {}\".format(obj.value))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Result plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'FIR filter freq. response angle')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ0AAAGVCAYAAAAljCzPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAAHJFJREFUeJzt3c9vHGee3/HPd2XvgjvAbpsaAoGIKHLroJOBiKYRDOaWIaEcBYNeX3OIyc0fIHL0F8iU9p5Q3vMOLBOGLjko5A5ySBDsDEUF45MObO9MICeA1q12gESADfmbQz2tKRWrq39U9/N0ke8X0JD66ae7Hj5s9qefp56qMncXAAAx/EnqBgAAzg9CBwAQDaEDAIiG0AEAREPoAACiIXQAANG8lboBwKjMbDP8tytpUdIDd+8lbBKAMTHSwRvMbNfMTszsRfj/drjtmdmBmXnuw7+sfntAef62PUG79iR13P2+u+9Lel/S7dzjK6F9L0qe256oM8Zr36aZPZ71diZR1TdAbMbBoSgys11Ja+7+fsljm5KuuvvOsPqhfMXd1wvlG5J2Jb0/6kjFzE7c/WrufltSN//8UPbY3d8pPHfb3e+Osp1JmdmKpHYIxLkzqG+A2BjpoMy3yqawTnH3++HxUeoX6/VfY19ST1nwDGVmrVA//xqdYmC5e2fAS6wPKJ8adz+e18CRKvsGiIrQwSSmsR+lKynKtFeM7QAYDQsJMBIzW3P3w3D3sLLyaFYlfTLKdpWNVNq5fUEXJW1IOnT3rYrnbijb97OYe+5x7ufoh1J/lPaBpDvKQuqzUPaRpBVJW5I+KpsODFNXe5JW+9NXYbrtM0mt0Ia1UP1jSTthm/2ydUm7/dFI4bnrYfuL4XWK9XYHbLc9bCot9E//52lJ+qAwbXqqbwb8/P1tDuyvqtca1I5R+6Hw8yzqjwtNDgf0af73sV58rWn1CwZwd27c3rhJ2pZ0UCwbp37F66xJ+kLSxhjtaUk6KZRtStorqfuicL9dfG7usV1Jm7n7K/32hv8/VravSspCpV3RxvaAbb/ov0bu5z8oKys8d0WSF+q1JJ3k2xHKSrdb1TfKQnut8PhB7v8D+2bAzz+wv4b087B2jNoPm/lthLIvCnUG/j5m1S/cTt8Y6WCQ/sjiorI/1rakSXbGt8NopaXs2+e6pM+9/v6P0n1Oowr7ibbd3fpl7n5sZu0wcuko+0A5Co8NHFGFxztmVizuKvu5j3JlHWUfdB8VylYLz+1I6nluVObuvbCKb7fw/LLtDtPW6WnSL6ThfePl+4dK+2uEfh7YjtzrVvZD2Maunx7Z7YVbf5/eoN9Hvu+n3S8oIHQwSMfDiq/w4TDSTv8Br5OfjrtvZo/NbNGzRQmprEnqhEDM6yn74Okq+7CrPW1SeI3uoLIRHWvy30XevqTHZraubOT1IPf7GNY3gz5cy/pr2GtVtaNKvh9Wy9rk7odmdlBSXtX3s+gX5BA6GCp8iz/1x1vDHWXH2KQMnbYK36CD96XX32prjaaCstCqE2T9fRStOoEYfqfvKpuW2pK0Z2Y74YtGZd9UKOuvoa9V0Y4qr/tB2Qhr4O+qMAqp7LMZ9QtyWL2GkUx5VNJT9kERXe5b6rGyqZam6X/w1RqBmdmKu/fc/a5nx1ddlbQVRrXT7JvK1xrSjir5fugom7otvnZLGm+5eMR+ObcIHSQTVhTNWn8lU1//Q+NI2aq2Nz5EzKwV4wwGNawrt3owfOgWPwhHaf/H+Z89fDDvhudOs2+GvVZVO6rk++FwQP1VZUExjlj9cm4ROihzUSXfHCeof3VAeX9Hbv+UOZsldfIWS17nVFnxw0A6NX/ff16/fEen94/8VfigGefnL912UFZeLBu0rVY+mMM2NnR6qXmnsP12cRsD2ne7cL8l6WiEvilT+jOM+Fql7cjfr+qHsI07JadX2tLpvhrl9zHNfkFR6uVz3ObrpuwP6kTZMtU9DVnanKv/Ivw/v0z2i3B7XZ573uul0yosUS3UWwn1+u3pf+A8DtvcDvXaxXqFbe2G5xXbsaFsafdGuLVKtrkypA/e2HZFu0cqC89vhZ9vJbS/f+qgU8u2w+PbuXrt8HoH4XVO9Y2yfRYr/f4v+z2U9c2Iv6NT/TXotYa1Y8x+2Aiv19/WSkUbB/0+ptYv3MpvnHsNmEPh2/zXfs7PlUY/nD1MrwEAoiF0gPk01j6lM4x+OGMIHWDO5M6p1rLsOkbncpku/XA2sU8HABANIx0AQDScBqfgpz/9qV+5ciV1MwCgMR4/fvxP7r40Sl1Cp+DKlSs6OjoaXhEAIEkys9+PWpfpNQBANIQOACAaQgcAEA2hAwCIhtABAERD6AAAoiF0AADREDoAgGgIHQBANJyRAKjp4ZNnuvfoqb7pvdSl1oJu3bimm9eXUzcLmEuEDlDDwyfPdPvLr/Tyh1eSpGe9l7r95VeSRPAAJZheA2q49+jp68Dpe/nDK9179DRRi4D5RugANXzTezlWOXDeETpADZdaC2OVA+cdoQPUcOvGNS28feGNsoW3L+jWjWuJWgTMNxYSADX0Fwts7/9O37/6UcusXgMqETpATTevL+tXv/mDJOnzrZ8lbg0w35heAwBEQ+gAAKIhdAAA0RA6AIBoCB0AQDSEDgAgGkIHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBoCB0AQDSEDgAgGkIHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBo3krdgHGY2bakjqRFSXL3+yPU74W7LXe/O9sWAgCqNCZ0zGxX0m/dfb9/38w2+vdL6m/nQ8bMVoplAIC4mjS9tlkImANJWxX1P87fcfdjSR/MomEAgNE0InTMbKWkuCtpreJpXTP7Ivcam5I+n3bbAACja0ToKNuH0y2U9coq5mxJWjGzF2HfTrdiKm7TzI7M7Oj58+dTaC4AoExTQqdVUtaVJDMre0zu3pG0J+lI0q4qptbc/b67r7r76tLS0hSaCwAo05TQ6SmsWMsp3n+Dme1JOnT3dUnrkjbz020AgPiasnqtq9OjnZYkufupabawD6gXFg/I3Q/N7F1JX8+6oQCAwRox0gnhUQyXRUmHA56yKOnbwmv0KuoDACJoROgED8xsI3d/Xdk+G0mSmbX7j7v7YXhcucdbyg4sBQAk0pTpNbn7lplth2BpSzoprEbbUBY0/bKtcEDpSe41dqI1GABwSmNCR5KqziYQHrubu9+RRMgAwBxp0vQaAKDhCB0AQDSEDgAgGkIHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBoCB0AQDSEDgAgGkIHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBoCB0AQDSEDgAgGkIHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBoCB0AQDSEDgAgGkIHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBoCB0AQDSEDgAgGkIHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBoCB0AQDRvpW7AOMxsW1JH0qIkufv9IfVbkm5LOglFR+5+PNNGAgAGasxIx8x2JXXcfT+EzVUz26io35L0hbvv5MLpdoy2AgDKNSZ0JG26+37u/oGkrYr6n0nay91/IGlnFg0DAIymEaFjZislxV1JaxVP25B0bGZtM1tx9567d2bTQgDAKBoROsr24XQLZb1BlXMhtZIr+yJMuZXV3zSzIzM7ev78ee3GAgDKNSV0ysKiK73ed1PUDv923L0TFg98rmzK7RR3v+/uq+6+urS0NJUGAwBOa0ro9BRWrOUU7+d1JKmwUq2jbMoNAJBIU0Knq9OjnZYkuXvZNNvAskFTbACA2WtE6IQRSzFIFiUdDqjfkdQzs3auuCWpNyCkAAARNCJ0ggeF43LWlVsSHVap5R+/ozdXt30cygAAiTQmdNx9S1LbzDbCmQlOCsftbCh33I6735XUMrPtUP/bUAYASKRRp8GpCo3w2N2SMgDAnGjMSAcA0HyEDgAgGkIHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBoCB0AQDSEDgAgGkIHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBoCB0AQDSEDgAgGkIHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBoCB0AQDSEDgAgGkIHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBoCB0AQDSEDgAgGkIHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBoCB0AQDSEDgAgGkIHABDNW6kbMA4z25bUkbQoSe5+f4zn7rn71qzaBgAYbqLQMbN/Kakdbj1JXUkdd/8fU2xbcZu7kn7r7vv9+2a20b8/wnPbs2obAGA0I0+vmdm7ZvYfzeyRpC1JVyV9J8nC///azP6zmf0HM7syg7ZuFgLmILSjkpmtzKAtAIAJjDTSMbNPJP2lpB13/25I3b+UtGlmL9z9b6fQxkHB0ZW0NsLTV5UFFOEDAIkNHemEwDl0978ZFjiS5O7fufs9SX9vZv9uGo1Utg+nWyjrDXuSmW1IejBCvU0zOzKzo+fPn0/YRADAMENDx90/c/evx31hd/96WiMdSa2Ssq4kmVnZY/3ynrsPDSd3v+/uq+6+urS0VK+lAICBprpkekb7cqRsVLNYKCveL/ordz+cUXsAABOoHTpm9hf9m6SdKbSpTFenRzstSSobyYR9QAQOAMyZSZdMfyJpT5IrW72W//ffT611gbsfm1kxXBY1OFgWJa2ZWf/+B5La4TiffXfvTLuNAIDhJj049Kqkd4oLC8zs0/pNGuhB4bicdWXB1992W9KKu++HabXD3GObktrufneG7QMADDHp9NrBgJVsd+o0pko4m0DbzDbCiOWkcNzOhkqO2wmB03/u7qCFBwCA2Zt0pONmdsXd/7FQ/omkv6nXpIqNVoxUwmOnHg+nyhn5dDkAgNmZNHT+WtL1sM+kv3/koqR3NcPQAQA026Sh05b0S715gKZJ2q7dIgDAmTVp6Oy4+98XC83s25rtAQCcYRMtJCgLnFD+pF5zAABn2UjnXpvkTAPhrNTTOvcaAOAMGOnca5LWzezOKOETzk7wqaTrUzz3GgDgDBhpn467f2Zm7yq7Zs51ZSvWepJOlJ2O5mL492oouzvJSUIBAGfbyAsJQoj8UsqmzvTHK4d+J+lrZVcOZZ8OAGCgiVavhQD6WlLpggIAAMo05dIGAIAzoCmXNgAAnAEThU5YRv2jmb1StqDgRfh3c5qNAwCcLZOOdPqXNrjg7n/S/1fSvSm2DQBwxkwaOr+NfWkDAEDzTRo6LwYsGvhk8qYAAM66kZZMm9mjYpGk982sKy5tAAAY0ajH6VxUNnXWq6jDpQ0AAJVGDZ3SSxkUcWkDYHwPnzzTvUdP9U3vpS61FnTrxjXdvL6culnATIx67rWRzjzAaXCA8Tx88ky3v/xKL394JUl61nup219+JUkED86kqZ6RAMB47j16+jpw+l7+8Er3Hj1N1CJgtggdIKFvei/HKgeajtABErrUWhirHGg6QgdI6NaNa1p4+8IbZQtvX9CtG9cStQiYrYkubQBgOvqLBbb3f6fvX/2oZVav4YwjdIDEbl5f1q9+8wdJ0udbP0vcGmC2mF4DAERD6AAAoiF0AADREDoAgGgIHQBANIQOACAaQgcAEA2hAwCIhtABAERD6AAAoiF0AADREDoAgGgIHQBANIQOACAaQgcAEA2hAwCIhtABAETTqCuHmtm2pI6kRUly9/sVdVuSNsPdDyQdVNUHAMxeY0LHzHYl/dbd9/v3zWyjf7/EbXffyT3/xMwqgwoAMFtNml7bLATMgaStsophlNMuFO9J2impDgCIpBGhY2YrJcVdSWsDnrIoac3M8sHT0+kgAgBE1JTptUVlIZPXG1TZ3TuS3ikUr0s6LKtvZpsK+38uX748eSsBAJUaMdKR1Cop60qvp9IqhTprGjC95u733X3V3VeXlpZqNRQAMFhTQqensGItp3i/ymeSfuHux9NrEgBgXE0Jna5Oj3ZakuTuA6fZpNfLrPcIHABIrxGhEwKjGC6LGrCPps/MNiQdu/thuD9o4QEAIIJGhE7wIIRI37qyZdCSJDNr5x8PAbMo6Sg81g7PAQAk0pjQcfctSW0z2whTZieF43Y2FI7bCQsHDpSF0gtJJ+HGkmkASKgpS6YlSe5+d8hjd8P/e5IsVrsAAKNpzEgHANB8hA4AIBpCBwAQDaEDAIiG0AEAREPoAACiIXQAANEQOgCAaAgdAEA0hA4AIBpCBwAQDaEDAIiG0AEAREPoAACiIXQAANE06no6QJmHT57p3qOn+qb3UpdaC7p145puXl9O3SwAJQgdNNrDJ890+8uv9PKHV5KkZ72Xuv3lV5JE8ABziOk1NNq9R09fB07fyx9e6d6jp4laBKAKoYNG+6b3cqxyAGkROmi0S62FscoBpEXooNFu3bimhbcvvFG28PYF3bpxLVGLAFRhIQEarb9YYHv/d/r+1Y9aZvUaMNcIHTTezevL+tVv/iBJ+nzrZ4lb0zwsOUdMhA5wjrHkHLGxTwc4x1hyjtgIHeAcY8k5YiN0gHOMJeeIjdBBbQ+fPNPPP/213v3lf9LPP/21Hj55lrpJGBFLzhEbCwlQCzuim40l54iN0EEtVTui+eBqBpacIyZC5wxIeZwFO6JRF8cJnS+ETsOlnt661FrQs5KAYUc0RpH6/Yv4WEgwBSl3pKc+zoId0agj9fsX8THSqSn1N7XU01vsiEYdqd+/EtN7sTHSqSn1N7V5OM7i5vVlXb/c0r96d1H/7Zf/mj9YjCz1+7f/pfFZ76Vcf/zSyLL/2SF0akr9TY3pLTRZ6vdv6i+NUvrj3GJvn+m1mlLvSGd6C02W+v2b+ktj6un5FNtnpFNT6m9qEtNbaLaU79/U03upR1optk/o1HTz+rLufPie/vRC1pXLrQXd+fA9PviBBkj9pTH1SCvF9plemwKO6AaaKfX0Xurp+RTbZ6QD4FxLOb2XeqSVYvuMdAAgkdQjrRTbJ3QAIKHU0/Oxt9+o0DGzbUkdSYuS5O73p1kfADBbjdmnY2a7kjruvh/C46qZbUyrPgBg9hoTOpI23X0/d/9A0tYU6wMAZqwR02tmtlJS3JW0No360/Bv/svf6Z89/5/6/X/9i4me/4/f/l9J0pWLP5no+f/2f/0fSWL7Dd1+09vP9pu//f+99M8l9um8tqgsNPJ606pvZpuSNiXp8uXLk7RPiz/5M/35dxeGVxzg/33/anilCn/+p5Nvm+2n337T28/2m7/9xZ/8Wa3XGJW5e5QN1RH2xey6+9VcWUvSC0nvuHuvTv281dVVPzo6mvaPMNTHe/9dUrqDS9l+2u3Xlbr9bP98b9/MHrv76ih1m7JPp6ewAi2neL9OfQBABE0Jna6kVqGsJUkDRi3j1gcARNCI0HH3Y53eJ7Mo6XAa9QEAcTQidIIHheNs1iXt9e+YWbvweGV9ADgLHj55pid/6Okfvu4muQjcuBoTOu6+JaltZhvhTAMnheNwNpQ7DmeE+gBQW8oP/f5F2L5/9aOkZlxuuylLpiVJ7n53yGN3S8oAYCYGfehLca78WXURtnm9pldjRjoAUCblSCP1lT9TXwRuEoTOHGjanCwwL1JPL6X+0E99ue1JEDqJpf6jAZos9Ugj9Yd+6ovATYLQSSz1H43ESAvNlXqkkfpD/+b1Zd358D0ttxZkkpZbC7rz4Xtzuz9HathCgrMo9R9N6h2hQB2XWgt6VvK3Emuk0f8buffoqb7pvdSlyFf+7LehSX+rhE5iqf9omrj6BfOlP1L+/tWP+vmnv476oXvrxjXd/vKrN97DsaeXmvahnxrTa4mlHp6nHmmh2VLvk2zi9NJ5x0gnsdTD89QjLTTbPIyUGWk0C6EzB1L+0czD9ASai5EyxsX02jnH9ATqSL1kGM3DSAfJpydS7ohGPYyUMS5CB0mxZLvZUu+TRPMQOkhqHnZEo57UI2U0C/t0kBQ7ooHzhdBBUuyIBs4XQgdJpT44FkBc7NNBUuyIBs4XQgfJsSMaOD+YXgMAREPoAACiIXQAANEQOgCAaAgdAEA0hA7QcP0Tpv7D1139/NNfR7uAGjAJQgdosNRX7gTGRegADVZ1wlRgHhE6QINxwlQ0DaEDNBgnTEXTEDpAg3HCVDQN514DGowTpqJpCB2g4ThhKpqE6TUAQDSEDgAgGkIHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBoCB2ce1yPBoiH0MG5xvVogLgIHZxrXI8GiIvQwbnG9WiAuBpxwk8z25bUkbQoSe5+v6JuS9JmuPuBpIOq+jjfLrUW9KwkYLgeDTAbcz/SMbNdSR133w/hcdXMNiqectvd74bbR5J2zGyzoj7OMa5HA8Q196EjadPd93P3DyRtlVUMo5x2oXhP0s6M2oaGu3l9WXc+fE/LrQWZpOXWgu58+B6XCgBmZK6n18xspaS4K2ltwFMWJa2ZWdvdO6Gsp9NBVNzOpsKU3OXLlydsLZqK69EA8cz7SGdRWcjk9QZVdveOu7+TCxxJWpd0WLURd7/v7qvuvrq0tDR5awEAleZ6pCOpVVLWlbKpNHcfGED9OspGRb+YQdsAAGOa95FOT2HFWk7xfpXPJP3C3Y+n1yQAwKSij3TCyrOPh1TruvuWslFNcbTTkqQRRjnbkvYIHACYH9FDJ6xE2x9aMat7bGbFcFnUkH00IdiO3f0w3F/r/x8AkM68T69J0oPCcTnrypZBS5LMrJ1/3MzWlAXTUXisHZ4DAEhs7kMnTLO1zWwjTJmdFI7b2VA4bicsHDhQFkovJJ2EW+WSaQBAHPO+ek2S5O53hzx2N/y/J8litQsAMJ65H+kAAM4OQgcAEI25e+o2zBUzey7p9xM+/aeS/mmKzTlv6L966L966L/J/Qt3H+l0LoTOFJnZkbuvpm5HU9F/9dB/9dB/cTC9BgCIhtABAERD6EwXVyith/6rh/6rh/6LgH06AIBoGOkAAKIhdAAA0RA6AIBoGnHutXkXTkTaUbjAnLuzQ3JE4Qzh65K+CEUfSdotXHIcQThr+oaki+6+U/I478UKVf3HezEORjo1mdmupI6774c/8KuFSzGg2qKyS4ofSNpVduE9/shLhMt2rEi6qpJLufNerDas/8R7MQpGOvVtFr4xHUja0YgXqoPk7ldTt6EJchcl/EDlH5q8FyuM0H+8FyNgpFODma2UFHeVfVsCouG9iKZgpFPPorI/7Lzi5bUxhJltKutH9kNMjvfiFPBenD1Cp56yIXpXyq5iGi4qh2pHknr9uXMz2zOzjcLVYTEc78X6eC9GwPRaPT2Fb0Q5xfuo4O7HhZ21B5Jup2pPg/FerIn3YhyETj1dnf6G2ZJeXzobQ4QVRXk9ZSuMMB7eizXxXoyD0KnB3Y91et58UdJhguY0Tjhm4sDM8h+WLWXHmWAMvBfr4b0YD6FT34PCsRDrkvZSNaZJwlTGVuGb+MfKjpHA+HgvToj3YjycZXoKckeBt5XtiGTFy4hyR4hL0kVJJ/RfubAs+mP9sb/2JX0eRjn9OrwXBxjWf7wX4yB0AADRML0GAIiG0AEAREPoAACiIXQAANEQOgCAaAgdAEA0hA4AIBpCBwAQDaEDAIiG0AEAREPoAACiIXQAANEQOgCAaN5K3QAA5cKVLHeVXaqgf12cdXHKfTQYlzYA5li4KNuupHV374QrW75wd0vcNGAiTK8B860nvb6ypQpXtgQah9AB5l+nWBBGPEDjEDoAgGgIHWD+LaZuADAthA4wp8xsRdKOpLaZbZtZy8x2w8O7ZtZO2DxgIqxeAwBEw0gHABANoQMAiIbQAQBEQ+gAAKIhdAAA0RA6AIBoCB0AQDSEDgAgGkIHABANoQMAiOb/A52ZdHktGx+IAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Show plot inline in ipython.\n",
    "%matplotlib inline\n",
    "\n",
    "# Plot properties.\n",
    "plt.rc('text', usetex=True)\n",
    "plt.rc('font', family='serif')\n",
    "font = {'weight' : 'normal',\n",
    "        'size'   : 16}\n",
    "plt.rc('font', **font)\n",
    "\n",
    "# Plot the FIR impulse reponse.\n",
    "plt.figure(figsize=(6, 6))\n",
    "plt.stem(range(n), h.value)\n",
    "plt.xlabel('n')\n",
    "plt.ylabel('h(n)')\n",
    "plt.title('FIR filter impulse response')\n",
    "\n",
    "# Plot the frequency response.\n",
    "H = np.exp(-1j * np.kron(w.reshape(-1, 1), np.arange(n))).dot(h.value)\n",
    "plt.figure(figsize=(6, 6))\n",
    "# Magnitude\n",
    "plt.plot(w, 20 * np.log10(np.abs(H)),\n",
    "         label='optimized')\n",
    "plt.plot(w, 20 * np.log10(np.abs(Hdes)),'--',\n",
    "         label='desired')\n",
    "plt.xlabel(r'$\\omega$')\n",
    "plt.ylabel(r'$|H(\\omega)|$ in dB')\n",
    "plt.title('FIR filter freq. response magnitude')\n",
    "plt.xlim(0, np.pi)\n",
    "plt.ylim(-30, 10)\n",
    "plt.legend(loc='lower right')\n",
    "# Phase\n",
    "plt.figure(figsize=(6, 6))\n",
    "plt.plot(w, np.angle(H))\n",
    "plt.xlim(0, np.pi)\n",
    "plt.ylim(-np.pi, np.pi)\n",
    "plt.xlabel(r'$\\omega$')\n",
    "plt.ylabel(r'$\\angle H(\\omega)$')\n",
    "plt.title('FIR filter freq. response angle')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
